<!DOCTYPE html>
<html lang="en">

<head>
  <meta charset="UTF-8">
  <meta http-equiv="X-UA-Compatible" content="IE=edge">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>Document</title>
</head>

<body>
  <script>
    const p1 = new Promise((resolve, reject) => {
      try {
        console.log("请求数据A")
        throw new Error("A错误")
        setTimeout(() => {
          console.log("请求A结束....");
          resolve("A数据")
        }, 1500)
      } catch (e) {
        reject(e.message)
      }
    })

    const p2 = new Promise((resolve, reject) => {
      try {
        console.log("请求数据B")
        throw new Error("B错误")
        setTimeout(() => {
          console.log("请求B结束....");
          resolve("B数据")
        }, 2500)
      } catch (e) {
        reject(e.message)
      }
    })


    const p3 = new Promise((resolve, reject) => {
      try {
        console.log("请求数据C")
        throw new Error("C错误")
        setTimeout(() => {
          // console.log("请求C结束....");
          resolve("C数据")
        }, 2000)
      } catch (e) {
        reject(e.message)
      }
    })

    /* 
      Promise.all方法:
        - 接受一个数组(原则上是iterable类型)作为参数
        - all方法默认返回pending状态的promise实例
        - 当所有的promise实例全部完成,返回fulfilled状态的实例,值为所有成功的值组成的数组
        - 当其中有一个promise实例执行失败,则all方法返回失败的promise实例,值是这个错误值
    */

    //   const result = Promise.all([p1, p2, p3]);

    /*
    Promise.allSettled方法:
      -默认是pending,
      -只有接收的所有promise实例改变状态时,返回成功的promise实例,
      值是接收的所有promise实例的状态和值组成的对象按顺序组成的数组
      =
    */
    // const result = Promise.allSettled([p1, p2, p3]);

    /*
    promise.race方法:
      -返回的promise实例的状态与race中接收的所有promise实例状态改变最快的那个保持一致
    */
    // const result = Promise.race([p1, p2, p3]);

    /*
    Promise.any方法:
      -返回的promise实例与接收的promise实例中状态最快变成成功的那一个保持一致
      -如果接收的promise实例全部都是失败状态,则any返回失败状态的promise实例,值为错误信息

    */
    // const result = Promise.any([p1, p2, p3]);

    /*
    promise.resolve方法:
      -快速的把一个值包装成成功的promise实例,当传入的值是promise实例时,resolve的返回值与这个实例保持一致

    */
    // const result = Promise.resolve(1);
    /*
    promise.reject方法:
      -快速的把一个值包装成失败的promise实例,返回值就是传参的值

    */
    const result = Promise.reject(1);

    console.log("result", result);
    result.then(value => {
      console.log("全部完成");
    }).catch(reason => {
      console.log("有错误的", reason);
    })
  </script>
</body>

</html>